package vetxsoft.bean;

import java.io.Serializable;
import java.util.List;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import vetxsoft.entity.Cliente;
import vetxsoft.system.IVetexsoftSystem;

/**
 *
 * @author Fary Hurtado <hurtadofary@gmail.com>
 */
@ManagedBean
@SessionScoped
public class ClienteBean implements Serializable {

    @EJB
    private IVetexsoftSystem vetexsoftSystem;
    private Cliente cliente = new Cliente();
    private boolean stored = false;

    public ClienteBean() {
    }

    public Cliente getCliente() {
        return cliente;
    }

    public void setCliente(Cliente cliente) {
        this.cliente = cliente;
    }

    public boolean isStored() {
        return stored;
    }

    public void setStored(boolean stored) {
        this.stored = stored;
    }

    public IVetexsoftSystem getVetexsoftSystem() {
        return vetexsoftSystem;
    }

    public List<Cliente> obtenerClientes() {
        try {

            return this.vetexsoftSystem.obtenerClientes();

        } catch (Exception ex) {
            return null;
        }
    }

    public void cancelAction() {

        this.cliente = new Cliente();
        this.stored = false;
    }

    public void saveAction() {
        try {

            this.cliente.setStored(this.stored);
            this.cliente.setCantidadpuntos(0);
            this.vetexsoftSystem.saveCliente(cliente);
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "El cliente ha sido registrado satisfactoriamente.", ""));

            this.cliente = new Cliente();
            this.stored = false;

        } catch (Exception ex) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "No se ha podido registrar el cliente. Por favor, vuelva a intentarlo.", ""));
        }
    }

    public void removeAction(Cliente clienteToDelete) {
        try {

            if (!clienteToDelete.getFacturaList().isEmpty() || !clienteToDelete.getMascotaList().isEmpty()) {

                clienteToDelete = new Cliente();
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "No se ha podido eliminar el cliente debido a que existen registros asociados a el. Por favor, vuelva a intentarlo.", ""));
                return;
            }
            if (clienteToDelete.getFacturaList() == null) {

                clienteToDelete = new Cliente();
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "No se ha podido eliminar el cliente debido a que existen registros asociados a el. Por favor, vuelva a intentarlo.", ""));
                return;
            }
            if (clienteToDelete.getMascotaList() == null) {

                clienteToDelete = new Cliente();
                FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "No se ha podido eliminar el cliente debido a que existen registros asociados a el. Por favor, vuelva a intentarlo.", ""));
                return;
            }

            this.vetexsoftSystem.removeCliente(clienteToDelete);
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "El cliente ha sido eliminado satisfactoriamente.", ""));

            clienteToDelete = new Cliente();
            this.stored = false;

        } catch (Exception ex) {
            clienteToDelete = new Cliente();
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "No se ha podido eliminar el cliente. Por favor, vuelva a intentarlo.", ""));
        }
    }
}
